﻿// Inner Fire 游戏引擎库
// UIPrefab - 用于UI的Prefab
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 用于UI的Prefab
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-04-24

#pragma once

#include <game/config/config_info.h>
#include <ui/prefab/button_info.h>

namespace ifire::game {
class ConfigManager;

class UIPrefab : public ConfigInfo {
public:
  UIPrefab(ConfigManager* manager, const XmlNode& node);
  UIPrefab(const UIPrefab& lhs) = delete;
  UIPrefab& operator=(const UIPrefab& lhs) = delete;
  ~UIPrefab() = default;

  // ------
  // 属性访问
  // ------
  bool IsLabel() const;
  bool IsImage() const;
  bool IsButton() const;
  const ui::LabelInfo* GetLabelInfo() { return label_info_.get(); }
  const ui::ButtonInfo* GetButtonInfo() { return button_info_.get(); }
  const ui::ImageInfo* GetImageInfo() { return image_info_.get(); }

private:
  ikit::sstr type;
  // 用于保存Label的项目
  ui::LabelInfoPtr label_info_;
  // 用于保存Image的项目
  ui::ImageInfoPtr image_info_;
  // 用于保存Button的项目
  ui::ButtonInfoPtr button_info_;
};
using UIPrefabPtr = std::unique_ptr<UIPrefab>;

} // namespace ifire::game